
/**
 * 先确定使用， 再进行手写instanceof
 * 1 左右两边， 左边如果是普通对象， 就直接返回false
 * 2 左边是引用对象， 再向左边的隐式对象上找， 只要有就一直找
 */

const a = function (){}
console.log(a instanceof Function )


function instanceofV1(L, R) {
    // 如果是除了null以外的普通对象， 就直接返回false
    const baseType = [ 'undefined', 'boolean','number', 'string', 'symbol']
    if(baseType.includes(typeof L)) return false

    let RP = R.prototype
    while (true){
        if(L === null){ // 找到最高层， 没有， 返回false
            return false
        }
        if(L === RP){  // 如果隐式对象和R的原型相等， 返回 true
            return true
        }
        L = L.__proto__ // 如果没有， 那么就继续向上查找
    }
}

console.log(instanceofV1(a, Function));


function instanceV2(L,R) {
    const baseType = ['undefined', 'boolean', 'number', 'string', 'symbol']
    if(baseType.includes(typeof L)) return false

    while (true) {
        if(L.__proto__ === null) return false
        if(L.__proto__ === R.prototype) return true;
        L = L.__proto__
    }
}

function instanceV3(L,R) {
    const baseTYpe = ['undefined', 'boolean','number', 'string','symbol']
    if(baseTYpe.includes(typeof L)) return  false;
    while(true) {
        if(L.__proto__ === null) return false
        if(L.__proto__ === RP) return true
        L = L.__proto__
    }
}

console.log('boolean',null instanceof Object)
console.log('boolean',{} instanceof Object)
console.log(typeof null) // typeof 检测基本数据类型， 只有null会是object， 算是一个bug， 其他都是对应的类型
console.log(typeof undefined)

function instanceV4(left,right){
    if(left===null || typeof left !=='object'){
        return false;
    }
    while (true){
        if(left===null){
            return  false
        }
        if(left===right.prototype){
            return  true
        }
        left = left.__proto__
    }
}

// 无差错 无丢失 无重复 按序 可靠的数据传输。 传输的是字节流
// 不可靠的数据传输：经最大成都的传输， 而不管其中传输的质量， 一般用于直播、视频通话类的。
// 虚拟DOM是因为操作实例的DOM很耗费资源， 然后， 操作virtual DOM， 可以减少对实例FOM的操作， 所有的操作完了以后， 就virtual DOM都绑定到真是的DOM上了。

// 盒模型： box-sizing： content-box； border-box；
// JSONP的原理和手写一个JSONP， 然后， JSONP的缺点： JSONP只能获取到get接口。

// http默认的端口号是80， https的默认端口号为443；

// cors跨域的配置： Access-control-Allow-Origin： 可以写域名和ip地址

// url到页面的呈现
/**
 * 1 dns域名解析
 * 2 强缓存和协商缓存
 * 3 http的链接： 三次握手
 * 4 后端接受前端的请求处理
 * 5 后端返回数据
 * 6 前端获取到字节- 字符 - token - DOM+ CSSOM
 * 7 layout 布局
 * 8 定位进行页面的回流
 * 9 页面渲染完成
 * 10 与http四次分手
 */

// 去除字符串前后的regex： string.replace(/\^s+/, ''), string.replace(/\s+$/, ''), 去除所有的空格 string.replace(/\s+/g, '')
// 手机号码： phone.validation(/^1[3456789]\d{9}$/g).

// Promise.all 是并发的还是串行的： 是并发的， 但是返回的数据还是和输入的请求是一样的。


// 正则里面的 非 ：^ 如果在括号外面， 表示从头开始， [^] 表示非




